home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / legacy.h < prev    next >
C/C++ Source or Header  |  2000-01-28  |  15KB  |  435 lines

  1. #ifndef LEGACY_H
  2. #define LEGACY_H
  3.  
  4. /* Functions and Tables used for converting old file to the new format */
  5. /* Define NOLEGACY for excluding the inclusion */
  6.  
  7. enum
  8. {
  9.     ver_567_KEYCODE_START = 0xff00,
  10.     ver_567_KEYCODE_A, ver_567_KEYCODE_B, ver_567_KEYCODE_C, ver_567_KEYCODE_D, ver_567_KEYCODE_E, ver_567_KEYCODE_F,
  11.     ver_567_KEYCODE_G, ver_567_KEYCODE_H, ver_567_KEYCODE_I, ver_567_KEYCODE_J, ver_567_KEYCODE_K, ver_567_KEYCODE_L,
  12.     ver_567_KEYCODE_M, ver_567_KEYCODE_N, ver_567_KEYCODE_O, ver_567_KEYCODE_P, ver_567_KEYCODE_Q, ver_567_KEYCODE_R,
  13.     ver_567_KEYCODE_S, ver_567_KEYCODE_T, ver_567_KEYCODE_U, ver_567_KEYCODE_V, ver_567_KEYCODE_W, ver_567_KEYCODE_X,
  14.     ver_567_KEYCODE_Y, ver_567_KEYCODE_Z, ver_567_KEYCODE_0, ver_567_KEYCODE_1, ver_567_KEYCODE_2, ver_567_KEYCODE_3,
  15.     ver_567_KEYCODE_4, ver_567_KEYCODE_5, ver_567_KEYCODE_6, ver_567_KEYCODE_7, ver_567_KEYCODE_8, ver_567_KEYCODE_9,
  16.     ver_567_KEYCODE_0_PAD, ver_567_KEYCODE_1_PAD, ver_567_KEYCODE_2_PAD, ver_567_KEYCODE_3_PAD, ver_567_KEYCODE_4_PAD,
  17.     ver_567_KEYCODE_5_PAD, ver_567_KEYCODE_6_PAD, ver_567_KEYCODE_7_PAD, ver_567_KEYCODE_8_PAD, ver_567_KEYCODE_9_PAD,
  18.     ver_567_KEYCODE_F1, ver_567_KEYCODE_F2, ver_567_KEYCODE_F3, ver_567_KEYCODE_F4, ver_567_KEYCODE_F5,
  19.     ver_567_KEYCODE_F6, ver_567_KEYCODE_F7, ver_567_KEYCODE_F8, ver_567_KEYCODE_F9, ver_567_KEYCODE_F10,
  20.     ver_567_KEYCODE_F11, ver_567_KEYCODE_F12,
  21.     ver_567_KEYCODE_ESC, ver_567_KEYCODE_TILDE, ver_567_KEYCODE_MINUS, ver_567_KEYCODE_EQUALS, ver_567_KEYCODE_BACKSPACE,
  22.     ver_567_KEYCODE_TAB, ver_567_KEYCODE_OPENBRACE, ver_567_KEYCODE_CLOSEBRACE, ver_567_KEYCODE_ENTER, ver_567_KEYCODE_COLON,
  23.     ver_567_KEYCODE_QUOTE, ver_567_KEYCODE_BACKSLASH, ver_567_KEYCODE_BACKSLASH2, ver_567_KEYCODE_COMMA, ver_567_KEYCODE_STOP,
  24.     ver_567_KEYCODE_SLASH, ver_567_KEYCODE_SPACE, ver_567_KEYCODE_INSERT, ver_567_KEYCODE_DEL,
  25.     ver_567_KEYCODE_HOME, ver_567_KEYCODE_END, ver_567_KEYCODE_PGUP, ver_567_KEYCODE_PGDN, ver_567_KEYCODE_LEFT,
  26.     ver_567_KEYCODE_RIGHT, ver_567_KEYCODE_UP, ver_567_KEYCODE_DOWN,
  27.     ver_567_KEYCODE_SLASH_PAD, ver_567_KEYCODE_ASTERISK, ver_567_KEYCODE_MINUS_PAD, ver_567_KEYCODE_PLUS_PAD,
  28.     ver_567_KEYCODE_DEL_PAD, ver_567_KEYCODE_ENTER_PAD, ver_567_KEYCODE_PRTSCR, ver_567_KEYCODE_PAUSE,
  29.     ver_567_KEYCODE_LSHIFT, ver_567_KEYCODE_RSHIFT, ver_567_KEYCODE_LCONTROL, ver_567_KEYCODE_RCONTROL,
  30.     ver_567_KEYCODE_LALT, ver_567_KEYCODE_RALT, ver_567_KEYCODE_SCRLOCK, ver_567_KEYCODE_NUMLOCK, ver_567_KEYCODE_CAPSLOCK,
  31.     ver_567_KEYCODE_OTHER,
  32.     ver_567_KEYCODE_NONE
  33. };
  34.  
  35. enum
  36. {
  37.     ver_567_JOYCODE_START = 0xff00,
  38.     ver_567_JOYCODE_1_LEFT,ver_567_JOYCODE_1_RIGHT,ver_567_JOYCODE_1_UP,ver_567_JOYCODE_1_DOWN,
  39.     ver_567_JOYCODE_1_BUTTON1,ver_567_JOYCODE_1_BUTTON2,ver_567_JOYCODE_1_BUTTON3,
  40.     ver_567_JOYCODE_1_BUTTON4,ver_567_JOYCODE_1_BUTTON5,ver_567_JOYCODE_1_BUTTON6,
  41.     ver_567_JOYCODE_2_LEFT,ver_567_JOYCODE_2_RIGHT,ver_567_JOYCODE_2_UP,ver_567_JOYCODE_2_DOWN,
  42.     ver_567_JOYCODE_2_BUTTON1,ver_567_JOYCODE_2_BUTTON2,ver_567_JOYCODE_2_BUTTON3,
  43.     ver_567_JOYCODE_2_BUTTON4,ver_567_JOYCODE_2_BUTTON5,ver_567_JOYCODE_2_BUTTON6,
  44.     ver_567_JOYCODE_3_LEFT,ver_567_JOYCODE_3_RIGHT,ver_567_JOYCODE_3_UP,ver_567_JOYCODE_3_DOWN,
  45.     ver_567_JOYCODE_3_BUTTON1,ver_567_JOYCODE_3_BUTTON2,ver_567_JOYCODE_3_BUTTON3,
  46.     ver_567_JOYCODE_3_BUTTON4,ver_567_JOYCODE_3_BUTTON5,ver_567_JOYCODE_3_BUTTON6,
  47.     ver_567_JOYCODE_4_LEFT,ver_567_JOYCODE_4_RIGHT,ver_567_JOYCODE_4_UP,ver_567_JOYCODE_4_DOWN,
  48.     ver_567_JOYCODE_4_BUTTON1,ver_567_JOYCODE_4_BUTTON2,ver_567_JOYCODE_4_BUTTON3,
  49.     ver_567_JOYCODE_4_BUTTON4,ver_567_JOYCODE_4_BUTTON5,ver_567_JOYCODE_4_BUTTON6,
  50.     ver_567_JOYCODE_OTHER,
  51.     ver_567_JOYCODE_NONE
  52. };
  53.  
  54. #define ver_567_IP_KEY_DEFAULT 0xffff
  55. #define ver_567_IP_KEY_NONE 0xfffe
  56. #define ver_567_IP_KEY_PREVIOUS 0xfffd
  57. #define ver_567_IP_JOY_DEFAULT 0xffff
  58. #define ver_567_IP_JOY_NONE 0xfffe
  59. #define ver_567_IP_JOY_PREVIOUS 0xfffd
  60. #define ver_567_IP_CODE_NOT 0xfffc
  61. #define ver_567_IP_CODE_OR 0xfffb
  62.  
  63. struct ver_table {
  64.     int pre;
  65.     int post;
  66. };
  67.  
  68. static struct ver_table ver_567_table_keyboard[] = {
  69.     { 0, CODE_NONE },
  70.     { ver_567_KEYCODE_A, KEYCODE_A },
  71.     { ver_567_KEYCODE_B, KEYCODE_B },
  72.     { ver_567_KEYCODE_C, KEYCODE_C },
  73.     { ver_567_KEYCODE_D, KEYCODE_D },
  74.     { ver_567_KEYCODE_E, KEYCODE_E },
  75.     { ver_567_KEYCODE_F, KEYCODE_F },
  76.     { ver_567_KEYCODE_G, KEYCODE_G },
  77.     { ver_567_KEYCODE_H, KEYCODE_H },
  78.     { ver_567_KEYCODE_I, KEYCODE_I },
  79.     { ver_567_KEYCODE_J, KEYCODE_J },
  80.     { ver_567_KEYCODE_K, KEYCODE_K },
  81.     { ver_567_KEYCODE_L, KEYCODE_L },
  82.     { ver_567_KEYCODE_M, KEYCODE_M },
  83.     { ver_567_KEYCODE_N, KEYCODE_N },
  84.     { ver_567_KEYCODE_O, KEYCODE_O },
  85.     { ver_567_KEYCODE_P, KEYCODE_P },
  86.     { ver_567_KEYCODE_Q, KEYCODE_Q },
  87.     { ver_567_KEYCODE_R, KEYCODE_R },
  88.     { ver_567_KEYCODE_S, KEYCODE_S },
  89.     { ver_567_KEYCODE_T, KEYCODE_T },
  90.     { ver_567_KEYCODE_U, KEYCODE_U },
  91.     { ver_567_KEYCODE_V, KEYCODE_V },
  92.     { ver_567_KEYCODE_W, KEYCODE_W },
  93.     { ver_567_KEYCODE_X, KEYCODE_X },
  94.     { ver_567_KEYCODE_Y, KEYCODE_Y },
  95.     { ver_567_KEYCODE_Z, KEYCODE_Z },
  96.     { ver_567_KEYCODE_0, KEYCODE_0 },
  97.     { ver_567_KEYCODE_1, KEYCODE_1 },
  98.     { ver_567_KEYCODE_2, KEYCODE_2 },
  99.     { ver_567_KEYCODE_3, KEYCODE_3 },
  100.     { ver_567_KEYCODE_4, KEYCODE_4 },
  101.     { ver_567_KEYCODE_5, KEYCODE_5 },
  102.     { ver_567_KEYCODE_6, KEYCODE_6 },
  103.     { ver_567_KEYCODE_7, KEYCODE_7 },
  104.     { ver_567_KEYCODE_8, KEYCODE_8 },
  105.     { ver_567_KEYCODE_9, KEYCODE_9 },
  106.     { ver_567_KEYCODE_0_PAD, KEYCODE_0_PAD },
  107.     { ver_567_KEYCODE_1_PAD, KEYCODE_1_PAD },
  108.     { ver_567_KEYCODE_2_PAD, KEYCODE_2_PAD },
  109.     { ver_567_KEYCODE_3_PAD, KEYCODE_3_PAD },
  110.     { ver_567_KEYCODE_4_PAD, KEYCODE_4_PAD },
  111.     { ver_567_KEYCODE_5_PAD, KEYCODE_5_PAD },
  112.     { ver_567_KEYCODE_6_PAD, KEYCODE_6_PAD },
  113.     { ver_567_KEYCODE_7_PAD, KEYCODE_7_PAD },
  114.     { ver_567_KEYCODE_8_PAD, KEYCODE_8_PAD },
  115.     { ver_567_KEYCODE_9_PAD, KEYCODE_9_PAD },
  116.     { ver_567_KEYCODE_F1, KEYCODE_F1 },
  117.     { ver_567_KEYCODE_F2, KEYCODE_F2 },
  118.     { ver_567_KEYCODE_F3, KEYCODE_F3 },
  119.     { ver_567_KEYCODE_F4, KEYCODE_F4 },
  120.     { ver_567_KEYCODE_F5, KEYCODE_F5 },
  121.     { ver_567_KEYCODE_F6, KEYCODE_F6 },
  122.     { ver_567_KEYCODE_F7, KEYCODE_F7 },
  123.     { ver_567_KEYCODE_F8, KEYCODE_F8 },
  124.     { ver_567_KEYCODE_F9, KEYCODE_F9 },
  125.     { ver_567_KEYCODE_F10, KEYCODE_F10 },
  126.     { ver_567_KEYCODE_F11, KEYCODE_F11 },
  127.     { ver_567_KEYCODE_F12, KEYCODE_F12 },
  128.     { ver_567_KEYCODE_ESC, KEYCODE_ESC },
  129.     { ver_567_KEYCODE_TILDE, KEYCODE_TILDE },
  130.     { ver_567_KEYCODE_MINUS, KEYCODE_MINUS },
  131.     { ver_567_KEYCODE_EQUALS, KEYCODE_EQUALS },
  132.     { ver_567_KEYCODE_BACKSPACE, KEYCODE_BACKSPACE },
  133.     { ver_567_KEYCODE_TAB, KEYCODE_TAB },
  134.     { ver_567_KEYCODE_OPENBRACE, KEYCODE_OPENBRACE },
  135.     { ver_567_KEYCODE_CLOSEBRACE, KEYCODE_CLOSEBRACE },
  136.     { ver_567_KEYCODE_ENTER, KEYCODE_ENTER },
  137.     { ver_567_KEYCODE_COLON, KEYCODE_COLON },
  138.     { ver_567_KEYCODE_QUOTE, KEYCODE_QUOTE },
  139.     { ver_567_KEYCODE_BACKSLASH, KEYCODE_BACKSLASH },
  140.     { ver_567_KEYCODE_BACKSLASH2, KEYCODE_BACKSLASH2 },
  141.     { ver_567_KEYCODE_COMMA, KEYCODE_COMMA },
  142.     { ver_567_KEYCODE_STOP, KEYCODE_STOP },
  143.     { ver_567_KEYCODE_SLASH, KEYCODE_SLASH },
  144.     { ver_567_KEYCODE_SPACE, KEYCODE_SPACE },
  145.     { ver_567_KEYCODE_INSERT, KEYCODE_INSERT },
  146.     { ver_567_KEYCODE_DEL, KEYCODE_DEL },
  147.     { ver_567_KEYCODE_HOME, KEYCODE_HOME },
  148.     { ver_567_KEYCODE_END, KEYCODE_END },
  149.     { ver_567_KEYCODE_PGUP, KEYCODE_PGUP },
  150.     { ver_567_KEYCODE_PGDN, KEYCODE_PGDN },
  151.     { ver_567_KEYCODE_LEFT, KEYCODE_LEFT },
  152.     { ver_567_KEYCODE_RIGHT, KEYCODE_RIGHT },
  153.     { ver_567_KEYCODE_UP, KEYCODE_UP },
  154.     { ver_567_KEYCODE_DOWN, KEYCODE_DOWN },
  155.     { ver_567_KEYCODE_SLASH_PAD, KEYCODE_SLASH_PAD },
  156.     { ver_567_KEYCODE_ASTERISK, KEYCODE_ASTERISK },
  157.     { ver_567_KEYCODE_MINUS_PAD, KEYCODE_MINUS_PAD },
  158.     { ver_567_KEYCODE_PLUS_PAD, KEYCODE_PLUS_PAD },
  159.     { ver_567_KEYCODE_DEL_PAD, KEYCODE_DEL_PAD },
  160.     { ver_567_KEYCODE_ENTER_PAD, KEYCODE_ENTER_PAD },
  161.     { ver_567_KEYCODE_PRTSCR, KEYCODE_PRTSCR },
  162.     { ver_567_KEYCODE_PAUSE, KEYCODE_PAUSE },
  163.     { ver_567_KEYCODE_LSHIFT, KEYCODE_LSHIFT },
  164.     { ver_567_KEYCODE_RSHIFT, KEYCODE_RSHIFT },
  165.     { ver_567_KEYCODE_LCONTROL, KEYCODE_LCONTROL },
  166.     { ver_567_KEYCODE_RCONTROL, KEYCODE_RCONTROL },
  167.     { ver_567_KEYCODE_LALT, KEYCODE_LALT },
  168.     { ver_567_KEYCODE_RALT, KEYCODE_RALT },
  169.     { ver_567_KEYCODE_SCRLOCK, KEYCODE_SCRLOCK },
  170.     { ver_567_KEYCODE_NUMLOCK, KEYCODE_NUMLOCK },
  171.     { ver_567_KEYCODE_CAPSLOCK, KEYCODE_CAPSLOCK },
  172.     { ver_567_KEYCODE_OTHER, CODE_OTHER },
  173.     { ver_567_KEYCODE_NONE, CODE_NONE },
  174.     { ver_567_IP_KEY_DEFAULT, CODE_DEFAULT },
  175.     { ver_567_IP_KEY_NONE, CODE_NONE },
  176.     { ver_567_IP_KEY_PREVIOUS, CODE_PREVIOUS },
  177.     { ver_567_IP_CODE_NOT, CODE_NOT },
  178.     { ver_567_IP_CODE_OR, CODE_OR },
  179.     { -1, -1 }
  180. };
  181.  
  182. static struct ver_table ver_567_table_joystick[] = {
  183.     { 0, CODE_NONE },
  184.     { ver_567_JOYCODE_1_LEFT, JOYCODE_1_LEFT },
  185.     { ver_567_JOYCODE_1_RIGHT, JOYCODE_1_RIGHT },
  186.     { ver_567_JOYCODE_1_UP, JOYCODE_1_UP },
  187.     { ver_567_JOYCODE_1_DOWN, JOYCODE_1_DOWN },
  188.     { ver_567_JOYCODE_1_BUTTON1, JOYCODE_1_BUTTON1 },
  189.     { ver_567_JOYCODE_1_BUTTON2, JOYCODE_1_BUTTON2 },
  190.     { ver_567_JOYCODE_1_BUTTON3, JOYCODE_1_BUTTON3 },
  191.     { ver_567_JOYCODE_1_BUTTON4, JOYCODE_1_BUTTON4 },
  192.     { ver_567_JOYCODE_1_BUTTON5, JOYCODE_1_BUTTON5 },
  193.     { ver_567_JOYCODE_1_BUTTON6, JOYCODE_1_BUTTON6 },
  194.     { ver_567_JOYCODE_2_LEFT, JOYCODE_2_LEFT },
  195.     { ver_567_JOYCODE_2_RIGHT, JOYCODE_2_RIGHT },
  196.     { ver_567_JOYCODE_2_UP, JOYCODE_2_UP },
  197.     { ver_567_JOYCODE_2_DOWN, JOYCODE_2_DOWN },
  198.     { ver_567_JOYCODE_2_BUTTON1, JOYCODE_2_BUTTON1 },
  199.     { ver_567_JOYCODE_2_BUTTON2, JOYCODE_2_BUTTON2 },
  200.     { ver_567_JOYCODE_2_BUTTON3, JOYCODE_2_BUTTON3 },
  201.     { ver_567_JOYCODE_2_BUTTON4, JOYCODE_2_BUTTON4 },
  202.     { ver_567_JOYCODE_2_BUTTON5, JOYCODE_2_BUTTON5 },
  203.     { ver_567_JOYCODE_2_BUTTON6, JOYCODE_2_BUTTON6 },
  204.     { ver_567_JOYCODE_3_LEFT, JOYCODE_3_LEFT },
  205.     { ver_567_JOYCODE_3_RIGHT, JOYCODE_3_RIGHT },
  206.     { ver_567_JOYCODE_3_UP, JOYCODE_3_UP },
  207.     { ver_567_JOYCODE_3_DOWN, JOYCODE_3_DOWN },
  208.     { ver_567_JOYCODE_3_BUTTON1, JOYCODE_3_BUTTON1 },
  209.     { ver_567_JOYCODE_3_BUTTON2, JOYCODE_3_BUTTON2 },
  210.     { ver_567_JOYCODE_3_BUTTON3, JOYCODE_3_BUTTON3 },
  211.     { ver_567_JOYCODE_3_BUTTON4, JOYCODE_3_BUTTON4 },
  212.     { ver_567_JOYCODE_3_BUTTON5, JOYCODE_3_BUTTON5 },
  213.     { ver_567_JOYCODE_3_BUTTON6, JOYCODE_3_BUTTON6 },
  214.     { ver_567_JOYCODE_4_LEFT, JOYCODE_4_LEFT },
  215.     { ver_567_JOYCODE_4_RIGHT, JOYCODE_4_RIGHT },
  216.     { ver_567_JOYCODE_4_UP, JOYCODE_4_UP },
  217.     { ver_567_JOYCODE_4_DOWN, JOYCODE_4_DOWN },
  218.     { ver_567_JOYCODE_4_BUTTON1, JOYCODE_4_BUTTON1 },
  219.     { ver_567_JOYCODE_4_BUTTON2, JOYCODE_4_BUTTON2 },
  220.     { ver_567_JOYCODE_4_BUTTON3, JOYCODE_4_BUTTON3 },
  221.     { ver_567_JOYCODE_4_BUTTON4, JOYCODE_4_BUTTON4 },
  222.     { ver_567_JOYCODE_4_BUTTON5, JOYCODE_4_BUTTON5 },
  223.     { ver_567_JOYCODE_4_BUTTON6, JOYCODE_4_BUTTON6 },
  224.     { ver_567_JOYCODE_OTHER, CODE_OTHER },
  225.     { ver_567_JOYCODE_NONE, CODE_NONE },
  226.     { ver_567_IP_JOY_DEFAULT, CODE_DEFAULT },
  227.     { ver_567_IP_JOY_NONE, CODE_NONE },
  228.     { ver_567_IP_JOY_PREVIOUS, CODE_PREVIOUS },
  229.     { ver_567_IP_CODE_NOT, CODE_NOT },
  230.     { ver_567_IP_CODE_OR, CODE_OR },
  231.     { -1, -1 }
  232. };
  233.  
  234. static int code_table_ver_567_keyboard(int v) {
  235.     struct ver_table* i = ver_567_table_keyboard;
  236.  
  237.     while (i->pre!=-1 || i->post!=-1) {
  238.         if (i->pre == v)
  239.             return i->post;
  240.         ++i;
  241.     }
  242.  
  243.     v = keyoscode_to_code(v);
  244.     if (v != CODE_NONE)
  245.         return v;
  246.  
  247.     return -1;
  248. }
  249.  
  250. static int code_table_ver_567_joystick(int v) {
  251.     struct ver_table* i = ver_567_table_joystick;
  252.  
  253.     while (i->pre!=-1 || i->post!=-1) {
  254.         if (i->pre == v)
  255.             return i->post;
  256.         ++i;
  257.     }
  258.  
  259.     v = joyoscode_to_code(v);
  260.     if (v != CODE_NONE)
  261.         return v;
  262.  
  263.     return -1;
  264. }
  265.  
  266. static int seq_partial_is_special_code(InputCode code) {
  267.     if (code < __code_max)
  268.         return 0;
  269.     if (code == CODE_NOT)
  270.         return 0;
  271.     return 1;
  272. }
  273.  
  274. static int seq_partial_read(void* f, InputSeq* seq, unsigned* pos, unsigned len, int (*code_table)(int))
  275. {
  276.     UINT16 w;
  277.     unsigned j = 0;
  278.     int code;
  279.  
  280.     if (readword(f,&w) != 0)
  281.         return -1;
  282.     ++j;
  283.     code = code_table(w);
  284.     if (code==-1)
  285.         return -1;
  286.  
  287.     /* if default + standard code, use the standard code */
  288.     if (*pos == 1 && (*seq)[0] == CODE_DEFAULT && !seq_partial_is_special_code(code))
  289.         *pos = 0;
  290.  
  291.     if (
  292.         /* if a special code is present don't insert another code */
  293.         (*pos == 0 || !seq_partial_is_special_code((*seq)[0])) &&
  294.         /* don't insert NONE code */
  295.         (code != CODE_NONE) &&
  296.         /* don't insert a special code after another code */
  297.         (*pos == 0 || !seq_partial_is_special_code(code) ))
  298.     {
  299.         if (*pos)
  300.         {
  301.             (*seq)[*pos] = CODE_OR;
  302.             ++*pos;
  303.         }
  304.  
  305.         (*seq)[*pos] = code;
  306.         ++*pos;
  307.  
  308.         while (j<len)
  309.         {
  310.             if (readword(f,&w) != 0)
  311.                 return -1;
  312.             ++j;
  313.  
  314.             code = code_table(w);
  315.             if (code==-1)
  316.                 return -1;
  317.             if (code == CODE_NONE)
  318.                 break;
  319.  
  320.             (*seq)[*pos] = code;
  321.             ++*pos;
  322.         }
  323.     }
  324.  
  325.     while (j<len)
  326.     {
  327.         if (readword(f,&w) != 0)
  328.             return -1;
  329.         ++j;
  330.     }
  331.  
  332.     return 0;
  333. }
  334.  
  335. static int seq_read_ver_5(void* f, InputSeq* seq)
  336. {
  337.     unsigned pos = 0;
  338.     seq_set_0(seq);
  339.  
  340.     if (seq_partial_read(f,seq,&pos,1,code_table_ver_567_keyboard) != 0)
  341.         return -1;
  342.     if (seq_partial_read(f,seq,&pos,1,code_table_ver_567_joystick) != 0)
  343.         return -1;
  344.     return 0;
  345. }
  346.  
  347. static int seq_read_ver_6(void* f, InputSeq* seq)
  348. {
  349.     unsigned pos = 0;
  350.     seq_set_0(seq);
  351.  
  352.     if (seq_partial_read(f,seq,&pos,2,code_table_ver_567_keyboard) != 0)
  353.         return -1;
  354.     if (seq_partial_read(f,seq,&pos,2,code_table_ver_567_joystick) != 0)
  355.         return -1;
  356.     return 0;
  357. }
  358.  
  359. static int seq_read_ver_7(void* f, InputSeq* seq)
  360. {
  361.     unsigned pos = 0;
  362.     seq_set_0(seq);
  363.  
  364.     if (seq_partial_read(f,seq,&pos,8,code_table_ver_567_keyboard) != 0)
  365.         return -1;
  366.     if (seq_partial_read(f,seq,&pos,8,code_table_ver_567_joystick) != 0)
  367.         return -1;
  368.     return 0;
  369. }
  370.  
  371. static int input_port_read_ver_5(void *f, struct InputPort *in)
  372. {
  373.     UINT32 i;
  374.     UINT16 w;
  375.     if (readint(f,&i) != 0)
  376.         return -1;
  377.     in->type = i;
  378.  
  379.     if (readword(f,&w) != 0)
  380.         return -1;
  381.     in->mask = w;
  382.  
  383.     if (readword(f,&w) != 0)
  384.         return -1;
  385.     in->default_value = w;
  386.  
  387.     if (seq_read_ver_5(f,&in->seq) != 0)
  388.         return -1;
  389.     return 0;
  390. }
  391.  
  392. static int input_port_read_ver_6(void *f, struct InputPort *in)
  393. {
  394.     UINT32 i;
  395.     UINT16 w;
  396.     if (readint(f,&i) != 0)
  397.         return -1;
  398.     in->type = i;
  399.  
  400.     if (readword(f,&w) != 0)
  401.         return -1;
  402.     in->mask = w;
  403.  
  404.     if (readword(f,&w) != 0)
  405.         return -1;
  406.     in->default_value = w;
  407.  
  408.     if (seq_read_ver_6(f,&in->seq) != 0)
  409.         return -1;
  410.     return 0;
  411. }
  412.  
  413. static int input_port_read_ver_7(void *f, struct InputPort *in)
  414. {
  415.     UINT32 i;
  416.     UINT16 w;
  417.     if (readint(f,&i) != 0)
  418.         return -1;
  419.     in->type = i;
  420.  
  421.     if (readword(f,&w) != 0)
  422.         return -1;
  423.     in->mask = w;
  424.  
  425.     if (readword(f,&w) != 0)
  426.         return -1;
  427.     in->default_value = w;
  428.  
  429.     if (seq_read_ver_7(f,&in->seq) != 0)
  430.         return -1;
  431.     return 0;
  432. }
  433.  
  434. #endif
  435.